<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="../static/css/prism.css" rel="stylesheet" />
    <link href="../static/css/style.css" rel="stylesheet" />
    <title>Document</title>
</head>

<body>
    <p style="color: blueviolet;">本节无script演示</p>

    <h1>Math 对象</h1>
    <p>Math是 JavaScript 的原生对象，提供各种数学功能。</p>

    <h2>Math.abs()</h2>
    <p><strong>返回参数的绝对值</strong></p>
    <pre><code class="language-javascript">Math.abs(1) // 1
Math.abs(-1) // 1</code></pre>

    <h2>Math.max()、Math.min()</h2>
    <p><strong>返回参数中最大/最小的那个值</strong></p>
    <pre><code class="language-javascript">Math.max(2, -1, 5) // 5
Math.min(2, -1, 5) // -1
Math.min() // Infinity，参数为空时 min 返回的值
Math.max() // -Infinity，参数为空时，max 返回的值</code></pre>

    <h2>Math.floor()、Math.ceil()</h2>
    <p><strong>floor() 向下取整，ceil() 向上取整</strong></p>
    <pre><code class="language-javascript">Math.floor(3.2) // 3
Math.floor(-3.2) // -4
Math.ceil(3.2) // 4
Math.ceil(-3.2) // -3</code></pre>

    <h2>Math.random()</h2>
    <p><strong>返回[0,1)的随机数</strong></p>
    <pre><code class="language-javascript">Math.random() // 0.28525367438365223</code></pre>
    <p>生成任意范围内的随机数，需要自己写逻辑：</p>
    <pre><code class="language-javascript">function getRandomArbitrary(min, max) {
    return Math.random() * (max - min) + min;
}

getRandomArbitrary(2, 10)</code></pre>

    <div class="explain">
        <p><strong>数学推导：</strong></p>
        <p>问题：</p>
        <p>
            生成的随机数 x 的取值范围为 [0, 1)，求生成随机数范围[a, b)时，对 x 的处理方式
        </p>
        <p>解答：</p>
        <p>
            将 x 先乘以 b-a，则取值范围变为 [0, b-a)，再加上 a，取值范围变为 [a, b)
        </p>
        <p>因此，x 的处理方式为 x(b-a) + a</p>
        <p>即上述代码中 Math.random() * (max - min) + min</p>
    </div>
    <script src="../static/js/prism.min.js"></script>
</body>

</html>